/**
 * 
 * DOM Ready
 * @author Joan Muñoz
 * 
 */
jQuery(function($){
    Sedes.init();
});

/**
 * 
 * Clase
 * @author Joan Muñoz
 * 
 */
var Sedes = new (function(){
    
    /**
     * 
     * Iniciliza las acciones
     * @author Joan Muñoz
     * 
     */
    this.init = function() {
        
        /** Oculta el formulario de inserción */
        $('#frm_insert').css({
            display : 'none',
            position : 'static',
            visibility : 'visible'
        });
        
        /** Botones de la sección */
       $('#btn_create').on('click', this.openFormCreateVenue);
       $('#btn_cancel').on('click', this.closeFormCreateVenue);
       $('#btn_save').on('click', this.validate);
       $('#btn_add_location').on('click', this.addNewPlace);
       this.initTableActions();
       
       /** Oculta el alert */
       $('.alert').hide();
    };
    
    /**
     * 
     * Inicializa las acciones de los botones dentro de la tabla
     * (editar y eliminar)
     * @author Joan Muñoz
     * 
     */
    this.initTableActions = function() {
      $('.edit_venue').off('click').on('click', this.editVenue);
      $('.delete_venue').off('click').on('click', this.deleteVenue);
    };
    
    /**
     * 
     * Edita una sede
     * @param JSON e -> El evento o elemento que mando llamar el método
     * @author Joan Muñoz
     * 
     */
    this.editVenue = function(e) {
      e.preventDefault();
      
      if ( $('#frm_insert').css('display') == 'none' ) {
        var id = $(this).attr('href');
        
        $.ajax({
          type : 'POST',
          url : 'sedes/actions.php?action=getvenue',
          data : {
            sede_id : id
          },
          dataType: "json",
          success : function(Data) {
            Sedes.openFormCreateVenue();
            
            // Asigna el id de la sede
            $('#sede_id').val(id);
            
            // Asigna el nombre de la sede
            $('#input_sede').val( Data.nombre );
            
            // Asigna las localidades
            var ids = Data.localidades.id;
            var nombres = Data.localidades.nombre;
            var costos = Data.localidades.costo;
            
            if( ids != undefined ) {
              for(a = 0; a < ids.length-1; a++) { Sedes.addNewPlace(); }
            
              $.each($('.locacion'), function(index) {
                  $('.locacion').eq(index).val( nombres[index] );
                  $('.precio').eq(index).val( costos[index] );
              });
            }
            
          }
        });
      } else {
        $('.alert').removeClass('alert-success').addClass('alert-error');
        $('.alert_message').html('Primero cierre el formulario para poder editar.');
        $('.alert').show();
      } // end if
    };
    
    /**
     * 
     * Elimina una sede
     * @param JSON e -> El evento o elemento que mando llamar el método
     * @author Joan Muñoz
     * 
     */
    this.deleteVenue = function(e) {
      e.preventDefault();
      
      if ( confirm('¿Está seguro de eliminar esta sede?') ) {
        var id = $(this).attr('href');
        var parent = $(this).parentsUntil('tr').parent();
        
        $.ajax({
           type : 'POST',
           url : 'sedes/actions.php?action=delete',
            data : {
              sede_id : id
            },
            dataType: "json",
            success : function(Data) {
              if ( Data.error == false ) {
                 $('.alert')
                 .removeClass('alert-error')
                 .addClass('alert-success');
                 
                 parent.remove();
              } else {
                  $('.alert')
                 .removeClass('alert-success')
                 .addClass('alert-error');
              }
              
              $('.alert_message').html(Data.message);
              $('.alert').show();
            }
        });
      } // end if
      
    };
    
    /**
     * 
     * Abre la sección para crear una sede
     * @author Joan Muñoz
     * 
     */
    this.openFormCreateVenue = function() {
        $('#frm_insert')[0].reset();
        $('#sede_id').val('');
        
        $("html:not(:animated),body:not(:animated)").animate(
            { scrollTop: 0 }, 
            300,
            function() {
                $('#frm_insert:not(:animated)').slideDown('slow');                
            } 
        );
    };
    
    /**
     * 
     * Cierra la sección para crear una sede
     * @author Joan Muñoz
     * 
     */
    this.closeFormCreateVenue = function(){
        $('#frm_insert .help-inline').hide();
        $('.control-group').removeClass('error');
        $('#frm_insert:not(:animated)').slideUp('slow');
        
        // Elimina las locaciones que hay de más
        $.each($('#localidad-table tr'), function(index) {
          if( index != 0 && index != 1 ) {
            $(this).remove();            
          }
        });
        
    };
    
    /**
     * 
     * Agrega una nueva locación
     * @author Joan Muñoz
     * 
     */
    this.addNewPlace = function() {
      var html = '<tr>';
      html += '<td class="control-group">';
      html += '<input type="text" name="locacion[]" class="locacion" value="" /><br />';
      html += '<span class="help-inline">Por favor llene este campo.</span>';
      html += '</td>';
      html += '<td class="control-group">';
      html += '<input type="text" name="precio[]" class="precio" value="" /><br />';
      html += '<span class="help-inline">Por favor llene este campo.</span>';                                 
      html += '</td>';
      html += '<td>';
      html += '<a href="javascript:void(0);" class="delete delete_location" title="Borrar Localidad"></a>';
      html += '</td>';
      html += '</tr>';
      
      $('#localidad-table').append(html);
      
      // Inicializa acciones
      $('a.delete').tooltip({ title : 'Eliminar.' });
      $('a.delete_location').off('click').on('click', Sedes.deletePlace);
    };
    
    /**
     * 
     * Elimina una locación
     * @author Joan Muñoz
     * 
     */
    this.deletePlace = function() {
      if ( confirm('¿Está seguro de eliminar esta locación?') ) {
        $(this).tooltip('hide');
        $(this).parentsUntil('tr').parent().remove();
      }
    };
    
    /**
     * 
     * Valida el formulario y manda guardar la sede
     * @author Joan Muñoz
     * 
     */
    this.validate = function() {
      
      // JSON que contiene si se guarda o no una sede
      var Error = {
        error : false,
        parent : ''
      };
      
      // Valida el formulario
      if ( $.trim( $('#input_sede').val() ) == '' ) {
        Error.parent = $('#input_sede').parent();
        Error.error = true;
      } else {
        $.each($('.locacion, .precio'), function(index) {
          if ( $.trim( $(this).val() ) == '' ) {
            Error.parent = $(this).parent();
            Error.parent.addClass('class name error');
            Error.parent.find('.help-inline').show();
            Error.error = true;
          }
        });
      }
      
      // Si hay un error marca el error en otro caso continua
      if ( Error.error ) {
        Error.parent.addClass('class name error');
        Error.parent.find('.help-inline').show();
        return false;
      } else {
        Sedes.saveVenue();
      }
    };
    
    /**
     * 
     * Guarda la sede
     * @author Joan Muñoz
     * 
     */
    this.saveVenue = function() {
      var url = ( $('#sede_id').val() == '' ) ? 
        'sedes/actions.php?action=save' : 'sedes/actions.php?action=edit'
      
      $.ajax({
        type : 'POST',
        url : url,
        data : $('#frm_insert').serialize(),
        dataType: "json",
        success : function(Data) {
          if ( Data.error == false ) {
           $('.alert')
           .removeClass('alert-error')
           .addClass('alert-success');
           
           if ( $('#sede_id').val() == '' ) {
             Sedes.createVenue(Data); // Crea la fila nueva en la tabla
           } else {
             Sedes.editVenueRow(Data); // Edita la fila en la tabla
           }
          
           Sedes.closeFormCreateVenue();
          } else {
            $('.alert')
           .removeClass('alert-success')
           .addClass('alert-error');
          }
          
          $('.alert_message').html(Data.message);
          $('.alert').show();
        }
      });
    };
    
    /**
     * 
     * Al guardar una nueva sede en la base de datos la muestra en la tabla
     * @param JSON Data -> Contiene los registros insertados en la BD
     * @author Joan Muñoz
     * 
     */
    this.createVenue = function(Data) {
      var html = '<tr>';
      html += '<th>#</th>';
      html += '<th>Sede</th>';
      html += '<th>Opciones</th>';
      html += '</tr>';
      html += '<tr>';
      html += '<td>'+ Data.id +'</td>';
      html += '<td>'+ Data.nombre +'</td>';
      html += '<td>';
      html += '<a href="'+ Data.id +'" class="edit edit_venue"></a>';
      html += '<a href="'+ Data.id +'" class="delete delete_venue"></a>';
      html += '</td>';
      html += '</tr>';
      
      // Pone el registro en la tabla
      $('#venues_table tr:first').remove();
      $('#venues_table').prepend(html);
      
      // Inicializa las acciones de los botones de la tabla
      this.initTableActions();
    };
    
    /**
     * 
     * Al editar una sede muestra el cambio en la tabla
     * @param JSON Data -> Contiene los registros insertados en la BD
     * @author Joan Muñoz
     * 
     */
    this.editVenueRow = function(Data) {
      var anchor = $('.edit_venue[href="'+ Data.id +'"]');
      var parent = anchor.parentsUntil('tr').parent();
      
      parent.find('td').eq(0).html(Data.id);
      parent.find('td').eq(1).html(Data.nombre);
    };
    
})();
